package com.cfw.authority;

import javax.servlet.http.HttpSession;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 세션변수(SessionInfo class)의 생성 및 변수를 세션에 저장하는 기능 수행한다.
 * 다른 모듈로 부터 세션 기본 정보를 받고, 지원함수를 이용하여 세션변수를 할당한다.
 * 지원함수를 이용하여 생성되는 정보는 다음과 같다.
 *   - 매핑된 유저아이디, 시스템에 사용등록된 사용자인지 여부, 협력사사용자 여부, MSTR권한그룹, MSTR사용자그룹     
 * <br/><b>History</b><br/>
 * <pre>
 * 2012. 5. 10. 최초작성
 * </pre>
 * @author 박형일
 * @version 1.0
 */
final public class SessionInfoSupport {
	final private static Logger logger = LoggerFactory.getLogger(SessionInfoSupport.class);
	
	final public static String SESSION_ATTR_NAME = "sessionInfo";
	public static final int A_MODE_AD = 1;
	public static final int A_MODE_STANDARD = 2;

	private SessionInfoSupport() {};
	
	/**
	 * 시스템 접근 권한이 있는 사용자인지을 확인
	 * TODO: 테이블을 이용하여 접근 권한 조회부분 추가 필요 
	 * @param id
	 * @return
	 */
	public static boolean isRegUser(final String userId) {
		return true;
	}
	
	/**
	 * 최소한의 SessionInfo 값을 받은 후 나머지 정보를 채운다
	 * @param info
	 * @return
	 */
	public static boolean setOtherInfo(final SessionInfo info) {
		if (info == null) { return false; }
		
		// mstrUserId, mstrUserPwd 조회부분
		final String userId = info.getUserId();
		String[] roleGroup = null;
		String[] userGroup = null;
		
		{
			// TODO: userId를 이용하여 사용자정보 조회하여 변수 할당
		}

		info.setRoleGroupName(roleGroup);
		info.setUserGroupName(userGroup);
		
		return true;
	}
	
	/**
	 * session에 SESSION_ATTRIBUTE_NAME으로 info attribute를 할당한다.
	 * @param session
	 * @param info
	 */
	public static void setSessionAttribute(final HttpSession session, final SessionInfo info) {
		setOtherInfo(info);
		session.setAttribute(SESSION_ATTR_NAME, info);
	}
	
	/**
	 * session에서 SESSION_ATTRIBUTE_NAME attribute를 null로 지정한다.
	 * session.invalidate는 수행하지 않는다.
	 * @param session
	 */
	public static void clearSessionAttribute(final HttpSession session) {
		session.setAttribute(SESSION_ATTR_NAME, null);
	}
	
	/**
	 * session에서 SESSION_ATTRIBUTE_NAME attribute를 조회하여 반환한다.
	 * @param session
	 * @return
	 */
	public static SessionInfo getSessionAttribute(final HttpSession session) {
		return (SessionInfo)session.getAttribute(SESSION_ATTR_NAME);
	}
}
